package Controlador;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;


public  class Dao_fich implements Dao{

	
	private ArrayList<Alumno> listaAlumno=new ArrayList<Alumno>();
	private Alumno al=null;
	
	/**
	 * Metodo para cargar el ArrayList con los datos del fichero principal
	 */
	public void cargarArrylist(String nombreFichero)
	{
		FileInputStream leer;
		try {
			leer = new FileInputStream(nombreFichero);
		
			ObjectInputStream leerObjeto=new ObjectInputStream(leer);
			Alumno empleado=null;
					
				empleado=(Alumno) leerObjeto.readObject();
				while(empleado!=null)
				{
					listaAlumno.add(empleado);
					empleado=(Alumno) leerObjeto.readObject();
				}
		
				leerObjeto.close();
			
		}
		catch(EOFException i)
		{		
		}
		catch(FileNotFoundException o)
		{
			System.out.println("no se ha encantrado el fichero");
		} 
		catch(ClassNotFoundException cnf)
		{
			System.out.println("El fichero no se ha leido");
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public String buscar(int dni)
	{
		
		for(int i=0;i<listaAlumno.size();i++)
		{
			if(listaAlumno.get(i).getDni()==dni)
			{
				al=new Alumno(listaAlumno.get(i).getDni(), 
						listaAlumno.get(i).getNombre(),
						listaAlumno.get(i).getPoblacion(),
						listaAlumno.get(i).getTelefono(),
						listaAlumno.get(i).getFecha_nac(),
						listaAlumno.get(i).getCarrera());
				
				return listaAlumno.get(i).toString();
			}
		}
		return "el alumnno no se ha encontrado";
			
	}
	
	public String insertar(Alumno alumno)
	{
		
		for(int i=0;i<listaAlumno.size();i++)
		{
			if(listaAlumno.get(i).getDni()==alumno.getDni())
			{
				return "el dni introducido esta cogido";
			}
		}
			listaAlumno.add(alumno);
			return this.buscar(alumno.getDni());
	}
	
	public String modificar(Alumno alumno)
	{
		
		if(alumno.getNombre().isEmpty())
		{
			alumno.setNombre(al.getNombre());
		}
		if(alumno.getPoblacion().isEmpty())
		{
			alumno.setPoblacion(al.getPoblacion());
		}
		if(alumno.getTelefono()==0)
		{
			alumno.setTelefono(al.getTelefono());
		}
		if(alumno.getFecha_nac().isEmpty())
		{
			alumno.setFecha_nac(al.getFecha_nac());
		}
		
		for(int i=0;i<listaAlumno.size();i++)
		{
			if(listaAlumno.get(i).getDni()==alumno.getDni())
			{
				 listaAlumno.remove(i);
				 listaAlumno.add(alumno);
				 return "alumnno modificado";
			}
		}
		
		return "no se puede modificar el dni";
				
	}
		
	
	public String eliminar(int dni)
	{
		for(int i=0;i<listaAlumno.size();i++)
		{
			if(listaAlumno.get(i).getDni()==dni)
			{
				listaAlumno.remove(i);
				return "alumnno eliminado";
			}
		}
		return "no se ha encontrado el alumnno";
	}
	
	public String verAlumnos(String combobox)
	{
		String s = "";
		for(int i=0;i<listaAlumno.size();i++)
		{
			if(listaAlumno.get(i).getCarrera().equalsIgnoreCase(combobox))
			{
				s+="\n "+listaAlumno.get(i).getDni();
				s+="\t\t "+listaAlumno.get(i).getNombre();
				s+="\t\t "+listaAlumno.get(i).getTelefono();
			}
		}
		
		if(!s.isEmpty())
		{
			return s;
		}
		else
		{
			return "no se ha encontrado alumnos matriculados en esta asignatura";
		}
	}
	/**
	 * Metodo para cargar el fichero con los cambios del arraylist 
	 * al terminar (darle al boton cerrar) la interfaz
	 */
	public void cargarFichero(String nombreFichero) 
	{
		
		if(!listaAlumno.isEmpty())
		{		
			FileOutputStream escribir;
			
			try{
				escribir = new FileOutputStream(nombreFichero);
				ObjectOutputStream escribirObjetos=new ObjectOutputStream(escribir);
			
					for(int i=0;i<listaAlumno.size();i++)
					{		
						
						escribirObjetos.writeObject(listaAlumno.get(i));
						
					}
					
						escribirObjetos.close();
				}
				catch(FileNotFoundException fnfe){
					System.out.println("el fichero no se encuentra");
				}
				catch(IOException io)
				{
					io.printStackTrace();
				}
		}
		
		
	}	
	
}
